home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC-SIG: World of Games
/
PC-SIG World of Games (CDRM1080710) (1993).iso
/
ENT
/
DISK1833.ZIP
/
SAPPH112.ARC
/
HANGUP.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1989-07-31
|
3KB
|
110 lines
PROGRAM HangUp;
{
USAGE: HANGUP <PORT ADDRESS IN DECIMAL> <BAUD RATE>
EXAMPLE: HANGUP 1016 300 <--- Hang up COM1 and reset to 300 baud
HANGUP 760 9600 <--- Hang up COM2 and reset to 9600 baud
HANGUP <--- COM1 and 1200 baud are assumed
}
USES CRT;
CONST { Serial Control }
RReady = 1;
TReady = $20;
BaudConst : real = 115200.0;
VAR
BaudRate : INTEGER;
Com1Base : INTEGER;
DataPort : INTEGER;
HighBaud : INTEGER;
IntReg : INTEGER;
InitBaud : INTEGER;
LowBaud : INTEGER;
LineContrl : INTEGER;
ModemContrl : INTEGER;
ModemStatus : INTEGER;
StatusPort : INTEGER;
VALRetCode : INTEGER;
PROCEDURE Logo;
BEGIN
WRITELN;
WRITELN('┌──────────────────────────────────────────────────────┬──────────────────┐');
WRITELN('│ Pinnacle Software''s Handy-Dandy Modem Hanger-Up │ HANGUP │');
WRITELN('├──────────────────────────────────────────────────────┴──────────────────┤');
WRITELN('│ C O P Y R I G H T (C) 1988 BY P I N N A C L E S O F T W A R E │');
WRITELN('│ P.O. Box 386, Town of Mount Royal, Montreal, Quebec, Canada H3P 3C6 │');
WRITELN('└─────────────────────────────────────────────────────────────────────────┘');
WRITELN;
END;
PROCEDURE GetAddresses;
BEGIN
LowBaud := Com1Base;
HighBaud := Com1Base + 1;
DataPort := Com1Base;
IntReg := Com1Base + 1;
LineContrl := Com1Base + 3;
ModemContrl := Com1Base + 4;
StatusPort := Com1Base + 5;
ModemStatus := Com1Base + 6;
END;
PROCEDURE SetBaud(SBRate : INTEGER);
BEGIN
BaudRate := SBRate;
PORT[IntReg] := 0;
PORT[LineContrl] := $80;
PORT[LowBaud] := LO(TRUNC(BaudConst / BaudRate));
PORT[HighBaud] := HI(TRUNC(BaudConst / BaudRate));
PORT[LineContrl] := 3;
PORT[ModemContrl] := 3;
END;
PROCEDURE ExtractParms;
BEGIN
IF LENGTH(PARAMSTR(1)) = 0
THEN Com1Base := 1016
ELSE
BEGIN
VAL(PARAMSTR(1),Com1Base,VALRetCode);
IF VALRetCode <> 0 THEN
BEGIN
WRITELN('HANGUP: Invalid COMM port address: ',PARAMSTR(1));
HALT(1);
END;
END;
IF LENGTH(ParamStr(2)) = 0
THEN InitBaud := 1200
ELSE
BEGIN
VAL(PARAMSTR(2),InitBaud,VALRetCode);
IF VALRetCode <> 0 THEN
BEGIN
WRITELN('HANGUP: Invalid initializing baudrate: ',PARAMSTR(2));
WRITELN(' 1200 assumed.');
InitBaud := 1200;
END;
END;
END;
PROCEDURE DropReady;
BEGIN
PORT[ModemContrl] := 0;
DELAY(750);
SetBaud(InitBaud);
END;
BEGIN
Logo;
ExtractParms;
GetAddresses;
DropReady;
END.